package com.sdkj.dspservice.common.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.sdkj.dspservice.common.base.entity.DataEntity;
import com.sdkj.dspservice.common.utils.IdGen;
import com.sdkj.dspservice.common.utils.StringUtils;
import com.sdkj.dspservice.common.utils.UserUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * mybatis-plus自动填充配置类
 *
 * @author tm
 * @version 2020/04/19 18:29
 */
@Slf4j
@Component
public class MyBatisPlusFill implements MetaObjectHandler {

    /**
     * 在执行mybatisPlus的insert()时，为我们自动给某些字段填充值，这样的话，我们就不需要手动给insert()里的实体类赋值了
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        //其中方法参数中第一个是前面自动填充所对应的字段，第二个是要自动填充的值。第三个是指定实体类的对象
        if(StringUtils.isBlank(String.valueOf(metaObject.getValue("id")))){
            this.setFieldValByName("id", IdGen.uuid(), metaObject);
        }
        String userId = UserUtils.getCurrentUserId();
        if(StringUtils.isBlank(userId)){
            userId = "1";
        }
        this.setFieldValByName("createBy", userId, metaObject);
        this.setFieldValByName("createDate", new Date(), metaObject);
        this.setFieldValByName("updateBy", userId, metaObject);
        this.setFieldValByName("updateDate",new Date(), metaObject);
        this.setFieldValByName("deleteFlag", DataEntity.DELETE_FLAG_NORMAL, metaObject);
    }

    /**
     * 在执行mybatisPlus的update()时，为我们自动给某些字段填充值，这样的话，我们就不需要手动给update()里的实体类赋值了
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        String userId = UserUtils.getCurrentUserId();
        if(StringUtils.isBlank(userId)){
            userId = "1";
        }
        this.setFieldValByName("updateBy", userId, metaObject);
        this.setFieldValByName("updateDate",new Date(), metaObject);
    }
}
